#include<bits/stdc++.h>
using namespace std;
long long n,m,mp[200005],ans;
vector<long long>poi[200005];
inline void dfs(long long now,long long lm){
    for(int i=0;i<poi[now].size();i++){
        if(mp[poi[now][i]]==0){
            ans++;
            mp[poi[now][i]]=1;
            if(poi[now][i]<=lm)dfs(poi[now][i],lm);
        }
    }
}
int main(){
    scanf("%lld%lld",&n,&m);
    for(int i=1;i<=m;i++){
        long long a,b;
        scanf("%lld%lld",&a,&b);
        poi[a].push_back(b);
        poi[b].push_back(a);
    }
    mp[1]=1;
    ans=1;
    for(int i=0;i<poi[1].size();i++){
        mp[poi[1][i]]=1;
        ans++;
    }
    printf("%lld\n",ans-1);
    long long last=1;//优化，只用从上一个成功的 k 往下 check 即可。
    for(int i=2;i<=n;i++){
        if(mp[i]==1){
            dfs(i,i);
            long long flag=1;
            for(int j=last;j<=i;j++){//优化
                if(mp[j]==0){
                    flag=0;
                    break;
                }
            }
            if(flag==1)printf("%lld\n",ans-i),last=i;
            else printf("-1\n");
        }
        else{
            printf("-1\n");
        }
    }
}
